package com.zhl.dao.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import com.zhl.dao.EmployeeDao;
import com.zhl.model.Employee;

@Service
public class EmployeeDaoImpl implements EmployeeDao{
	/*
	 * 使用MongoTemplate直接做CRUD操作，需要映射实体类
	 * 如果没有实体类，先用MongoTemplate.getCollection("employee");-->>>转换为DBCollection类在操作
	 * 
	 * 增加，save()和insert()的区别。数据库若已存在，insert则不会执行，sava则更新此条信息，按id
	 * 
	 * 新增时，会有一个"_class"字段，记录实体类class 的 package 值
	 * 
	 * updateFirst,	更新时，如果数据库没有查到对应字段，不操作
     * upsert,		更新时，如果数据库没有查到对应字段，则会insert一条数据进去（变量类型更新不同时也会insert比如，int 12；和 String "12"）
     * updateMulti	更新时，更新所有匹配到的数据，无匹配则无操作
     * 
	 */	
	@Autowired
	MongoTemplate template;
	
	//新增
	public void insert(Employee employee) {
		template.insert(employee,"employee");
	}

	//获取所有
	public List<Employee> find() {
		List<Employee> employees= template.findAll(Employee.class,"employee");
		return employees;
	}

	//按条件查询
	public List<Employee> find(Query query) {
		List<Employee> employees= template.find(query,Employee.class,"employee");
		return employees;
	}

	//按条件更新
	/*
     * updateFirst,	更新时，如果数据库没有查到对应字段，不操作
     * upsert,		更新时，如果数据库没有查到对应字段，则会insert一条数据进去（变量类型更新不同时也会insert比如，int 12；和 String "12"）
     * updateMulti	更新时，更新所有匹配到的数据，无匹配则无操作
     */
	public void update(Query query, Update update) {
		 template.updateMulti(query, update, Employee.class, "employee");
	}

	public void delete(Query query) {
		 template.remove(query,Employee.class,"employee");
	}

}
